﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataBaseManager;

namespace BLGPS
{
    public class ColeccionVehiculo:List<Vehiculo>
    {
        internal static ColeccionVehiculo CargarPorEmpresa(Empresa empresa)
        {
#warning implementar
           return Testing.CrearCamiones();  
        }

        public Vehiculo ObtenerPorId(decimal id)
        {
            return this.SingleOrDefault<Vehiculo>(v=>v.Id==id); 
        }

        internal static ColeccionVehiculo CargarPorFlota(Flota flota)
        {
            #warning implementar
            try
            {
                ColeccionVehiculo vehiculos = new ColeccionVehiculo();
                vehiculos.AddRange(Testing.CrearCamiones().GetRange((int)(flota.Id * 10), 10));
                vehiculos.ForEach(v => v.Flota = flota);
                return vehiculos;
            }
            catch (Exception)
            {
                return null;
            }
              
        }

        public ColeccionVehiculo ObtenerPorTipo(TipoVehiculo tipo)
        {
            ColeccionVehiculo vehiculos = new ColeccionVehiculo();

            var vs= from Vehiculo v in this where v.TipoVehiculo.Id==tipo.Id select v;
           
            vehiculos.AddRange(vs);

            return vehiculos ;
        }

        public ColeccionVehiculo ObtenerSinDispositivo(Empresa empresa)
        {
            ColeccionVehiculo vehiculos = new ColeccionVehiculo();
            ColeccionDispositivo dispositivos = empresa.ObtenerDispositivos();
           
            bool existe = false;
            foreach (var item in empresa.Vehiculos)
            {
                existe = false;
                foreach (var disp in dispositivos)
                {
                    if (disp.Vehiculo != null)
                    {
                        if (item.Id == disp.Vehiculo.Id)
                        {
                            existe = true;
                            break;
                        }
                    }
                   
                }
                if (!existe) vehiculos.Add(item);
            }

            return vehiculos;
        }
    }
}
